home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / games_d / subchase.zip / SUBCHASE.BAS
BASIC Source File  |  1988-10-26  |  13KB  |  396 lines

  1. 2188 GOSUB 5000
  2. 2190 '
  3. 2200 '                          Action!
  4. 2210 '
  5. 2220 CLS:V=TIMER
  6. 2230 LOCATE 25,3:PRINT"Subs:";:PRINT USING SCORE$;DEADSUBS;
  7. 2240 LOCATE 25,20:PRINT"Score:";:PRINT USING SCORE$;SCR
  8. 2250 '
  9. 2260 '  SHP = Ship Position (H)
  10. 2270 '    V = Timer
  11. 2280 '
  12. 2290 '
  13. 2300 '
  14. 2310 '
  15. 2320 '
  16. 2330 '
  17. 2340 '
  18. 2350 DRAW "b u85 b l320"
  19. 2360 FOR X=1 TO 40
  20. 2370 DRAW "c1 r3 u1 r3 u1 r3 d1 r3 d1 r3"
  21. 2380 NEXT
  22. 2390 LINE (1,190)-(600,190)
  23. 2400 '
  24. 2410 ON KEY(10) GOSUB 2950'             Depth Chahge!
  25. 2420 KEY(10)ON
  26. 2430 ON KEY(11) GOSUB 3740'             Speed Up!
  27. 2440 KEY(11)ON:KEY(11)STOP
  28. 2450 ON KEY(14) GOSUB 3810'             Speed Down!
  29. 2460 KEY(14)ON:KEY(14)STOP
  30. 2470 SHPSPD=4:LOCATE 25,51:PRINT"Speed in Knots:";8;
  31. 2480 '
  32. 2490 FOR R=1 TO 4
  33. 2500 GOSUB 3230:GOSUB 3300
  34. 2510 X(R)=X:Y(R)=Y:SPD(R)=SPD:PUT (X(R),Y(R)),SUB:CHK(R)=1
  35. 2520 NEXT
  36. 2530 SHIPCHK=1
  37. 2540 SHP=570
  38. 2550 IF SHIPCHK=1 THEN 2580
  39. 2560 SHIPCHK=0:PUT (SHP+SHPSPD,7),SHIP
  40. 2570 KEY(11)ON:KEY(14)ON
  41. 2580 PUT (SHP,7),SHIP
  42. 2590 KEY(11)STOP:KEY(14)STOP
  43. 2600 '
  44. 2610 '
  45. 2620 FOR R=1 TO 4
  46. 2630 IF CHK(R)=1 THEN CHK(R)=0:GOTO 2660
  47. 2640 PUT (X(R)-SPD(R),Y(R)),SUB
  48. 2650 PUT (X(R),Y(R)),SUB
  49. 2660 NEXT
  50. 2670 '
  51. 2680 IF VCHK=0 THEN VCHK=V+.5
  52. 2690 V=TIMER:IF VCHK>V THEN 2690
  53. 2700 VCHK=V+.5
  54. 2710 SHP=SHP-SHPSPD
  55. 2720 FOR R=1 TO 4
  56. 2730 X(R)=X(R)+SPD(R):IF X(R)<600 THEN 2760
  57. 2740 PUT (X(R)-SPD(R),Y(R)),SUB:CHK(R)=1
  58. 2750 GOSUB 3300:X(R)=1:Y(R)=Y:SPD(R)=SPD:PUT (X(R),Y(R)),SUB
  59. 2760 NEXT
  60. 2770 '
  61. 2780 KEY(10)STOP
  62. 2790 GOSUB 3030'                Check Chahges
  63. 2800 '
  64. 2810 '          Any Hits?
  65. 2820 '
  66. 2830 FOR YY=1 TO 8'              Depth Charges
  67. 2840 IF START(YY)=0 THEN 2910
  68. 2850 FOR R=1 TO 4'                Subs
  69. 2860 IF START(YY)<X(R)-4 OR START(YY)>X(R)+31 THEN 2900
  70. 2870 IF D(YY)<Y(R) OR D(YY)>Y(R)+6 THEN 2900
  71. 2880 XR=X(R):YR=Y(R):SPDR=SPD(R):SUB=R:GOSUB 3410'              Kill Sub
  72. 2890 GOSUB 3300:X(R)=1:Y(R)=Y:SPD(R)=SPD:PUT (X(R),Y(R)),SUB:CHK(R)=1
  73. 2900 NEXT R
  74. 2910 NEXT YY
  75. 2920 KEY(10)ON
  76. 2930 IF SHP>26 THEN 2560
  77. 2940 PUT(SHP+SHPSPD,7),SHIP:GOTO 2530
  78. 2950 '
  79. 2960 '                  Depth Chahge!
  80. 2970 '
  81. 2980 FOR X=1 TO 8:IF START(X)=0 THEN 3010
  82. 2990 NEXT
  83. 3000 RETURN
  84. 3010 START(X)=SHP+18
  85. 3020 RETURN
  86. 3030 '
  87. 3040 '  Depth Charge
  88. 3050 '
  89. 3060 FOR X=1 TO 8
  90. 3070 IF START(X)=0 THEN 3210
  91. 3080 IF ACTION(X)=0 THEN PUT(START(X),5),CAN1:GOTO 3180
  92. 3090 IF ACTION(X)=1 THEN PUT(START(X),5),CAN1:PUT(START(X)+3,3),CAN1:GOTO 3180
  93. 3100 IF ACTION(X)=2 THEN PUT(START(X)+3,3),CAN1:PUT(START(X)+6,1),CAN1:GOTO 3180
  94. 3110 IF ACTION(X)=3 THEN PUT(START(X)+6,1),CAN1:PUT(START(X)+9,4),CAN2:GOTO 3180
  95. 3120 IF ACTION(X)=4 THEN PUT(START(X)+9,4),CAN2:PUT(START(X)+12,9),CAN2:GOTO 3180
  96. 3130 IF ACTION(X)=5 THEN PUT(START(X)+12,9),CAN2:PUT(START(X)+15,13),CAN2:GOTO 3180
  97. 3140 IF ACTION(X)=6 THEN PUT(START(X)+15,13),CAN2:START(X)=START(X)+18:PUT(START(X),17),CAN2:GOTO 3180
  98. 3150 IF ACTION(X)=7 THEN PUT(START(X),17),CAN2:D(X)=20:PUT(START(X),D(X)),CAN1:D(X)=D(X)+3:GOTO 3180
  99. 3160 IF ACTION(X)=8 THEN PUT(START(X),D(X)-3),CAN1:PUT(START(X),D(X)),CAN2:D(X)=D(X)+3:ACTION(X)=9:GOTO 3190
  100. 3170 PUT(START(X),D(X)-3),CAN2:PUT(START(X),D(X)),CAN1:D(X)=D(X)+3:ACTION(X)=8:GOTO 3190
  101. 3180 ACTION(X)=ACTION(X)+1:GOTO 3210
  102. 3190 IF D(X)>185 AND ACTION(X)=8 THEN PUT(START(X),D(X)-3),CAN1:START(X)=0:D(X)=0:ACTION(X)=0:GOTO 3210
  103. 3200 IF D(X)>185 AND ACTION(X)=9 THEN PUT(START(X),D(X)-3),CAN2:START(X)=0:D(X)=0:ACTION(X)=0:GOTO 3210
  104. 3210 NEXT
  105. 3220 RETURN
  106. 3230 '
  107. 3240 '  X Co-Ordinate
  108. 3250 '
  109. 3260 RANDOMIZE TIMER
  110. 3270 X=RND(10):X=INT(X*1000)
  111. 3280 IF X<1 OR X>590 THEN 3270
  112. 3290 RETURN
  113. 3300 '
  114. 3310 '  Y Co-Ordinate
  115. 3320 '
  116. 3330 RANDOMIZE TIMER
  117. 3340 Y=RND(10):Y=INT(Y*1000)
  118. 3350 IF Y<20 OR Y>180 THEN 3340
  119. 3360 IF Y<70 THEN SPD=7:GOTO 3400'      Set Subs Speed
  120. 3370 IF Y<120 THEN SPD=5:GOTO 3400
  121. 3380 IF Y<150 THEN SPD=3:GOTO 3400
  122. 3390 SPD=1
  123. 3400 RETURN
  124. 3410 '
  125. 3420 '          Kill Da Sub
  126. 3430 '
  127. 3440 IF ACTION(YY)=9 THEN 3460
  128. 3450 PUT(START(YY),D(YY)-3),CAN1:GOTO 3470
  129. 3460 PUT(START(YY),D(YY)-3),CAN2
  130. 3470 START(YY)=0:D(YY)=0:ACTION(YY)=0
  131. 3480 PUT(XR-SPDR,YR),SUB
  132. 3490 PUT(XR,YR),CRUNCH1
  133. 3500 IF OS = 1 THEN SOUND 77,1:SOUND 107,1
  134. 3510 GOSUB 3720
  135. 3520 PUT(XR,YR),CRUNCH1
  136. 3530 PUT(XR,YR),CRUNCH2
  137. 3540 IF OS = 1 THEN SOUND 57,1:SOUND 87,1
  138. 3550 GOSUB 3720
  139. 3560 PUT(XR,YR),CRUNCH2
  140. 3570 PUT(XR,YR),CRUNCH3
  141. 3580 IF OS = 1 THEN SOUND 37,1:SOUND 67,1
  142. 3590 GOSUB 3720
  143. 3600 PUT(XR,YR),CRUNCH3
  144. 3610 PUT(XR,YR),CRUNCH4
  145. 3620 GOSUB 3720
  146. 3630 PUT(XR,YR),CRUNCH4
  147. 3640 PUT(XR,YR),CRUNCH5
  148. 3650 GOSUB 3720
  149. 3660 PUT(XR,YR),CRUNCH5
  150. 3670 SCR=SCR+INT((2*YR)/25)
  151. 3680 LOCATE 25,26:PRINT USING SCORE$;SCR;
  152. 3690 DEADSUBS=DEADSUBS+1
  153. 3700 LOCATE 25,9:PRINT USING SCORE$;DEADSUBS;
  154. 3710 RETURN
  155. 3720 FOR WT=1 TO 500:NEXT
  156. 3730 RETURN
  157. 3740 '
  158. 3750 '          Ship's Speed Up
  159. 3760 '
  160. 3770 IF SHPSPD=11 THEN 3790
  161. 3780 SHPSPD=SHPSPD+1
  162. 3790 LOCATE 25,65:PRINT SHPSPD*2;
  163. 3800 RETURN
  164. 3810 '
  165. 3820 '          Ship's Speed Down
  166. 3830 '
  167. 3840 IF SHPSPD=0 THEN 3790
  168. 3850 SHPSPD=SHPSPD-1
  169. 3860 GOTO 3790
  170. 3861 '
  171. 3862 '           Toggle Sound
  172. 3863 '
  173. 3864 IF OS = 0 THEN OS = 1 ELSE OS = 0
  174. 3865 RETURN
  175. 3870 '
  176. 3880 '          Duck!
  177. 3890 '
  178. 3900 CLS:END
  179. 3910 RETURN
  180. 5000 '
  181. 5010 '                      Sub Chase
  182. 5020 '                     Version 1.0
  183. 5030 '
  184. 5040 '   Jeff Levering  -  July 4, 1984  -  Boston, Mass.
  185. 5050 '                    (617) 726-0789
  186. 5060 '
  187. 5070 '            Requires: IBM-PC
  188. 5080 '                      Graphics (IBM)
  189. 5090 '                     Basica 2.0
  190. 5100 '
  191. 5110 '
  192. 5120 SCORE$="#####,"
  193. 5130 KEY OFF
  194. 5140 KEY 7,"210-999"+CHR$(13)
  195. 5150 ON KEY(5) GOSUB 3870'              Abandon Ship!
  196. 5160 KEY(5)ON
  197. 5170 OS = 1
  198. 5180 ON KEY(1) GOSUB 3861'              Toggle Sound
  199. 5190 KEY(1)ON
  200. 5200 DIM CAN1(100):DIM CAN2(100)
  201. 5210 DIM CRUNCH1(100):DIM CRUNCH2(100):DIM CRUNCH3(100):DIM CRUNCH4(100)
  202. 5220 DIM CRUNCH5(100)
  203. 5230 SCREEN 2,0:CLS
  204. 5240 A$="b m60,100":DRAW A$
  205. 5250 DRAW "u2 r1 u2 r1 u2 r3 u2 r15 u1 r60 u1 r 76"
  206. 5260 DRAW "u2 r1 u10 r1 u15 r2 u8"
  207. 5270 DRAW "r2 u1 r15 u1 r6 u23 l1 u1 l4 u6"
  208. 5280 DRAW "r4 d1 r4 d1 r2 d4 r1 d23 d1 r4"
  209. 5290 DRAW "d1 r13 d1 r8 d1 r5 d1 r4 d6 r1 d8 r1 d8 r1
  210. 5300 DRAW "d8 r1 d2 r8 d1 r15 d1 r30 d1 r50 d1 r50 d1 r60"
  211. 5310 DRAW "d1 r22 d1 r6 d1 r3 d2 r3 d2 l3 d2 l3 d2 l7 d2 l8 d2"
  212. 5320 DRAW "l13 d1 l12 d2 l15 d2 l18 d2 l22 d2 l17 d2 l17 d2 l20 d3 l15 d3
  213. 5330 DRAW "l27 d1 l18 d2 l25 d2 l50 d1 l30 u1 l40 u1 l30 u2 l30 u3 l20
  214. 5340 DRAW "u3 l13 u3 l8 u3 l6 u2 l1 u2 l1 u2 l1 u3 l1 u4 l1 u1 l1 u2
  215. 5350 DRAW "l1 u1
  216. 5360 LOCATE 13,28:PRINT"Sub Chase"
  217. 5370 LOCATE 15,25:PRINT"by Jeff Levering"
  218. 5380 LOCATE 23,20:PRINT"Do You Want Instructions (Y/N) ?";
  219. 5390 X=0:Y=1
  220. 5400 P=10
  221. 5410 PP$=INKEY$
  222. 5420 IF Y=1 THEN CIRCLE(400,20),P,Y:P=P+15
  223. 5430 IF Y=0 THEN CIRCLE(400,20),P,Y:P=P-15
  224. 5440 IF X=0 THEN IF OS = 1 THEN SOUND 1000,2
  225. 5450 X=X+1:IF X<10 THEN 5500
  226. 5460 IF OS = 1 THEN SOUND 1000,2:X=0
  227. 5470 IF Y=0 THEN Y=1:GOTO 5490
  228. 5480 Y=0:P=P-15:GOTO 5500
  229. 5490 P=10
  230. 5500 IF PP$="" THEN 5410
  231. 5510 IF PP$="y" OR PP$="Y" THEN 5540
  232. 5520 IF PP$="n" OR PP$="N" THEN 5990
  233. 5530 BEEP:GOTO 5410
  234. 5540 CLS
  235. 5550 LOCATE 1,25:PRINT"SUB CHASE - Instructions"
  236. 5560 LOCATE 4,1:PRINT"Sub Chase is an IBM-PC version of the classic arcade sub game."
  237. 5570 LOCATE 7,1:PRINT"At the top of the screen you'll see a destroyer on patrol. This is your ship,":PRINT
  238. 5580 PRINT "and your job is to sink the submarines which pass below you.":PRINT:PRINT
  239. 5590 PRINT "Four Submarines will appear on the screen at all times. You have in":PRINT
  240. 5600 PRINT "your arsenal eight (8) depth charges which you can release on the":PRINT
  241. 5610 PRINT "unsuspecting submarines by pressing Function Key 10 (F10).":PRINT
  242. 5620 PRINT "     Note: This is the first SUB CHASE, and has not been cleaned up"
  243. 5630 PRINT "           enough to be compiled. In this interpreted version the game"
  244. 5640 PRINT "           can be somewhat slow. The speed of the game will"
  245. 5650 PRINT "           depend on how many of your 8 depth charges you"
  246. 5660 PRINT "           have in the water at any time. The more you have in,
  247. 5670 PRINT "           the slower the game."
  248. 5680 LOCATE 25,25:PRINT"Press any key when ready...";
  249. 5690 PP$=INKEY$:IF PP$="" THEN 5690
  250. 5700 CLS
  251. 5710 LOCATE 1,25:PRINT"SUB CHASE - Instructions"
  252. 5720 LOCATE 4,1:PRINT "The speed of your boat can be controlled by using the UP and DOWN cursor keys."
  253. 5730 PRINT:PRINT "Pressing UP will speed up your boat, and pressing DOWN will slow it down."
  254. 5740 PRINT:PRINT:PRINT"A status line will appear at the bottom of the screen which will show"
  255. 5750 PRINT:PRINT"you how many subs you've sunk, what your score is, and your boat's speed."
  256. 5760 PRINT:PRINT"The deeper the sub is when you sink it, the more points you get."
  257. 5770 PRINT:PRINT:PRINT"There is also a Panic Key, Function Key 5 (F5), which will stop the game and":PRINT
  258. 5780 PRINT:PRINT"clear the screen. This can be useful if your boss wanders in. To restart the"
  259. 5790 PRINT:PRINT"game, press F2."
  260. 5800 LOCATE 25,22:PRINT"Press any key to start ";
  261. 5810 A=64:B=35
  262. 5820 PP$=INKEY$
  263. 5830 IF A=44 THEN A=64:GOTO 5880
  264. 5840 LOCATE 25,A:PRINT"SUB ";
  265. 5850 FOR Y=1 TO B:NEXT
  266. 5860 A=A-1
  267. 5870 IF PP$<>"" THEN 5990 ELSE 5820
  268. 5880 PP$=INKEY$
  269. 5890 IF A=48 THEN 5940
  270. 5900 LOCATE 25,A:PRINT"CHASE ";
  271. 5910 FOR Y=1 TO B:NEXT
  272. 5920 A=A-1
  273. 5930 IF PP$<>"" THEN 5990 ELSE 5880
  274. 5940 X=0
  275. 5950 PP$=INKEY$
  276. 5960 X=X+1
  277. 5970 IF X=150 THEN LOCATE 25,A-4:PRINT"            ";:A=64:GOTO 5820
  278. 5980 IF PP$<>"" THEN 5990 ELSE 5950
  279. 5990 SCREEN 2,0:CLS:X=1
  280. 6000 A$(1)="   1  "
  281. 6010 A$(2)="  1 1 "
  282. 6020 A$(3)=" 1   1"
  283. 6030 A$(4)="1   1"
  284. 6040 A$(5)=" 1 1"
  285. 6050 A$(6)="  1"
  286. 6060 FOR Y=1 TO 6
  287. 6070 FOR R=1 TO LEN(A$(Y))
  288. 6080 PSET (R,X),VAL(MID$(A$(Y),R,1))
  289. 6090 NEXT R
  290. 6100 X=X+1
  291. 6110 NEXT Y
  292. 6120 GET(1,1)-(7,7),CAN1:X=1:CLS
  293. 6130 A$(1)="  1"
  294. 6140 A$(2)=" 1 1"
  295. 6150 A$(3)="1   1"
  296. 6160 A$(4)=" 1   1"
  297. 6170 A$(5)="  1 1"
  298. 6180 A$(6)="   1"
  299. 6190 FOR Y=1 TO 6
  300. 6200 FOR R=1 TO LEN(A$(Y))
  301. 6210 PSET (R,X),VAL(MID$(A$(Y),R,1))
  302. 6220 NEXT R
  303. 6230 X=X+1
  304. 6240 NEXT Y
  305. 6250 GET(1,1)-(7,7),CAN2
  306. 6260 DIM SHIP(400)
  307. 6270 DIM SUB(400)
  308. 6280 SCREEN 2,0:WIDTH 80:CLS:X=55
  309. 6290 LOCATE 25,20:PRINT"Please Wait - Setting Up Graphics...";
  310. 6300 LOCATE 8,24:PRINT"Ship"
  311. 6310 A$(1)="           11"
  312. 6320 A$(2)="    1      1111"
  313. 6330 A$(3)="     111   11111       1 1"
  314. 6340 A$(4)="1    111   11111       1 1"
  315. 6350 A$(5)=" 111111111111111111111111111"
  316. 6360 A$(6)="  1111111111111111111111"
  317. 6370 A$(7)="   111111111111111111111"
  318. 6380 FOR Y=110 TO 117
  319. 6390 FOR R=1 TO LEN(A$(X-54))
  320. 6400 PSET (R+250,X),VAL(MID$(A$(X-54),R,1))
  321. 6410 NEXT R
  322. 6420 X=X+1
  323. 6430 NEXT Y
  324. 6440 GET (250,55)-(285,62),SHIP
  325. 6450 X=95
  326. 6460 LOCATE 13,24:PRINT"Sub"
  327. 6470 A$(1)="                  1"
  328. 6480 A$(2)="                  1"
  329. 6490 A$(3)="               11111"
  330. 6500 A$(4)="               11111"
  331. 6510 A$(5)="  1111111111111111111111111111"
  332. 6520 A$(6)="11111111111111111111111111111"
  333. 6530 FOR Y=1 TO 6
  334. 6540 FOR R=1 TO LEN(A$(Y))
  335. 6550 PSET (R+250,X),VAL(MID$(A$(Y),R,1))
  336. 6560 NEXT R
  337. 6570 X=X+1
  338. 6580 NEXT Y
  339. 6590 GET (250,95)-(285,102),SUB
  340. 6600 A$(1)="                1 11  1111    "
  341. 6610 A$(2)="                1111 11111    "
  342. 6620 A$(3)="11              111111111     "
  343. 6630 A$(4)="1111111          1111111      "
  344. 6640 A$(5)="  111111111 1111111111        "
  345. 6650 A$(6)="     11111111111111           "
  346. 6660 FOR Y=1 TO 6
  347. 6670 FOR R=1 TO LEN(A$(Y))
  348. 6680 PSET (R+250,Y+95),VAL(MID$(A$(Y),R,1))
  349. 6690 NEXT R
  350. 6700 NEXT Y
  351. 6710 GET (250,95)-(285,102),CRUNCH1
  352. 6720 A$(1)="111          1      11        "
  353. 6730 A$(2)=" 11111        111  1111       "
  354. 6740 A$(3)="  111111      111111111       "
  355. 6750 A$(4)="   111111       1111111       "
  356. 6760 A$(5)="    1111111    1111111        "
  357. 6770 A$(6)="     11 1    1 1 111          "
  358. 6780 FOR Y=1 TO 6
  359. 6790 FOR R=1 TO LEN(A$(Y))
  360. 6800 PSET (R+250,Y+95),VAL(MID$(A$(Y),R,1))
  361. 6810 NEXT R
  362. 6820 NEXT Y
  363. 6830 GET (250,95)-(285,102),CRUNCH2
  364. 6840 A$(1)=" 11          1     1 1        "
  365. 6850 A$(2)="  11111       1     11        "
  366. 6860 A$(3)="     111       1 111111       "
  367. 6870 A$(4)=" 11  11 1      111 11 1  1    "
  368. 6880 A$(5)="    11  111  1    11          "
  369. 6890 A$(6)="      1 1      1 1 1          "
  370. 6900 FOR Y=1 TO 6
  371. 6910 FOR R=1 TO LEN(A$(Y))
  372. 6920 PSET (R+250,Y+95),VAL(MID$(A$(Y),R,1))
  373. 6930 NEXT R
  374. 6940 NEXT Y
  375. 6950 GET (250,95)-(285,102),CRUNCH3
  376. 6960 A$(1)="       1     1     1       1  "
  377. 6970 A$(2)="  1  1      1        1    1   "
  378. 6980 A$(3)="        1 1   1     1 1       "
  379. 6990 A$(4)=" 1   1  1  1   1 1  1 1  1    "
  380. 7000 A$(5)="        1 1  1    1           "
  381. 7010 A$(6)="    1       1   1    1        "
  382. 7020 FOR Y=1 TO 6
  383. 7030 FOR R=1 TO LEN(A$(Y))
  384. 7040 PSET (R+250,Y+95),VAL(MID$(A$(Y),R,1))
  385. 7050 NEXT R
  386. 7060 NEXT Y
  387. 7070 GET (250,95)-(285,102),CRUNCH4
  388. 7080 FOR X=1 TO 7:A$(X)=STRING$(30,32):NEXT
  389. 7090 FOR Y=1 TO 7
  390. 7100 FOR R=1 TO LEN(A$(Y))
  391. 7110 PSET (R+250,Y+94),VAL(MID$(A$(Y),R,1))
  392. 7120 NEXT R
  393. 7130 NEXT Y
  394. 7140 GET (250,95)-(285,102),CRUNCH5
  395. 7160 RETURN
  396.